package com.shycloud.mido.organ.mapper;

import com.baomidou.mybatisplus.annotation.SqlParser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.shycloud.mido.opter.api.vo.OptGoodsVO;
import com.shycloud.mido.organ.api.dto.ActiveByCodeDTO;
import com.shycloud.mido.organ.api.dto.ActivePageDTO;
import com.shycloud.mido.organ.api.dto.CodeDTO;
import com.shycloud.mido.organ.api.dto.JoyMasterDTO;
import com.shycloud.mido.organ.api.entity.MemberActivateEntity;
import com.shycloud.mido.organ.api.vo.OrgGoodsVO;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

public interface MemberActivateMapper extends BaseMapper<MemberActivateEntity> {
	@SqlParser(filter = true)
	IPage<ActivePageDTO> tracedBack(@Param("page") Page page, @Param("udid") String udid, @Param("orgId") String orgId, @Param("status") String status, @Param("type") String type, @Param("name") String name, @Param("optId") Integer optId);

	@SqlParser(filter = true)
	IPage<ActiveByCodeDTO> getActiveByCode(@Param("page") Page page, @Param("phone") String phone, @Param("orgId") String orgId, @Param("duration") String duration, @Param("leftDays") String leftDays, @Param("startDate") String startDate, @Param("endDate") String endDate);

	@SqlParser(filter = true)
	IPage<ActiveByCodeDTO> getActiveByDuration(@Param("page") Page page, @Param("phone") String phone, @Param("orgId") String orgId, @Param("optId") String optId, @Param("duration") String duration, @Param("leftDays") String leftDays, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("dueStartDate") String dueStartDate, @Param("dueEndDate") String dueEndDate, @Param("type") String type);

	@SqlParser(filter = true)
	List<ActiveByCodeDTO> getActiveByMemberId(@Param("memberId") String memberId, @Param("type") String type);

	IPage<CodeDTO> getCodePage(@Param("page") Page page, @Param("code") String code, @Param("name") String name, @Param("duration") String duration, @Param("comment") String comment);

	/**
	 * 权限开通页面, 查看所有激活开通历史
	 */
	IPage<JoyMasterDTO> selectAllActivation(@Param("page") Page page, @Param("phone") String phone, @Param("code") String code, @Param("duration") String duration);

	/**
	 * 权限开通页面, 查看所有激活开通历史
	 */
	IPage<JoyMasterDTO> selectActivation(@Param("page") Page page, @Param("phone") String phone, @Param("code") String code, @Param("orgId") String orgId, @Param("optId") String optId, @Param("duration") String duration, @Param("startDate") String startDate, @Param("endDate") String endDate);

	/**
	 * 权限开通页面, 查看运营商之前激活历史
	 */
	@SqlParser(filter = true)
	IPage<JoyMasterDTO> selectActivationByOptr(@Param("page") Page page, @Param("phone") String phone, @Param("udid") String udid, @Param("optId") Integer optId, @Param("orgId") Integer orgId);

	/**
	 * 根据MemberId来查看激活开通历史
	 */
	List<JoyMasterDTO> selectActivitionByMemberId(@Param("memberId") String memberId);

	//ADDED

	/**
	 * 查询纠错大师列表
	 *
	 * @param orgId 机构id
	 * @return IPage<OptDeviceVO>
	 */
	List<OrgGoodsVO> getMasterStock(@Param("orgId") Integer orgId);

	/**
	 * 新增纠错大师激活开通记录
	 */
	boolean insertActivation(@Param("entity") MemberActivateEntity entity);

	/**
	 * 更新纠错大师激活开通记录(机构)
	 */
	boolean updateOrgActivationCount(@Param("orgId") String orgId,
									 @Param("productId") String productId,
									 @Param("amount") int amount);

	/**
	 * 插入纠错大师激活开通记录(机构)
	 */
	boolean insertOrgActivationCount(@Param("orgId") String orgId,
									 @Param("productId") String productId,
									 @Param("amount") int amount);

	//Deprecated 见opter的operationController

	/**
	 * 更新纠错大师激活开通记录(运营商)
	 */
	boolean updateOptrActivationCount(@Param("optrId") String optrId,
									  @Param("productId") String productId,
									  @Param("amount") int amount);

	int checkIsUdid(@Param("udid") String udid);
}
